#ifndef CONSTRUITRACE_H
#define CONSTRUITRACE_H

#include "BaseUI.h"

//#include "ADD.h"
#include "CapaciteRaciale.h"

class QVBoxLayout;
class QGroupBox;
class QPushButton;
class QLCDNumber;
class QButtonGroup;
class QPushButton;

class Race;

/**
 * Classe permettant de déterminer les capacités raciales.
 *
 * La classe récupère les noms et coûts des différentes capacités
 * raciales, les éventuels ensembles raciaux et construit un ensemble
 * de checkbox qui permet de choisir les capacités. La Race donnée
 * lors de la construction est modifiée lorsque le choix et validé.
 *
 * @author Johan "Solo" Luisier
 */
class ConstruitRace : public BaseUI
{
  Q_OBJECT
 public:
  ConstruitRace( Race *race, QWidget* parent = 0 );
  ~ConstruitRace();
  StatusCode raceChoisie();
  static void setLevel( const DebugLevelType& level, const unsigned& );
 protected:
  QGroupBox *boite, /**< Groupe "physique" des capacités */
    *boiteEns; /**< Groupe "physique" des ensembles raciaux */
  /**
   * Groupe "logique" de tous les boutons (capacités et ensembles
   * raciaux), utilisé pour détecter quel bouton a été pressé.
   */
  QButtonGroup *groupe;
  /**
   * Affichage du nombre de PP restant.
   */
  QLCDNumber *nbrPP;
  /**
   * Nombre de PP disponibles pour la création de la Race.
   */
  unsigned int PP;
  /**
   * Nombre de capacités raciales.
   */
  unsigned int nbrCapa;
  /**
   * Liste des capacités raciales.
   */
  std::vector<CapaciteRaciale> Capacites;
 private:
  void preparerAffichage();
  /**
   * Race qui est construite.
   */
  Race *mRace;
  vector<bool> aCapa, /**< Détermine si la Race a la capacité i */
    aEns; /**< Détermine si la Race a l'ensemble racial i */
  /**
   * Détermine si un ensemble a été sélectionné.
   */
  bool ensPris;
  unsigned int ens, /**< Nombre d'ensembles raciaux */
    maxCapa; /**< Nombre maximal de capacité dans un ensemble racial */
  /**
   * Pointeur permettant de récupérer les capacités d'un ensemble
   * racial donné. Est présent en tant que membre de classe dans un
   * but d'optimisation.
   */
  const std::vector<unsigned int> *ensRacial;
  /**
   * Niveau de sortie relatif au traitement de la liste de
   * compétences.
   */
  static DebugLevelType gestionListe;
  private slots:
  void ajouterCapacite(const int& cap);
  void fermer();
  void miseAJour();
};

#endif // CONSTRUITRACE_H
